From 451d3a158aaf08ba286dd9bb5cb7207f7a7e3762 Mon Sep 17 00:00:00 2001 From: tsteven4 <13596209+tsteven4@users.noreply.github.com> Date: Sat, 18 Apr 2020 06:17:27 -0600 Subject: [PATCH] update linux/macos CI Qt 5.12.8 (#541) * update CI to 5.12.8 (except appveyor) we use the appveyor installed Qt 5.12, which is currently 5.12.6. * update travis yaml syntax. * update macos build system for Qt 5.12 build. * try osx_image: xcode11.3 osx_image xcode10.3 failed 3 times in a row. It showed an incomplete Qt install and repeated attempts to detatch. * debug macos qt install fails * Revert "debug macos qt install fails" This reverts commit 36df50bc865b515b4545f5f25cc65f5e0575d325. * Revert "try osx_image: xcode11.3" This reverts commit ff1e803234b31671e77d8d9ca68e74d62e753b80. * Revert "update macos build system for Qt 5.12 build." This reverts commit efedf5132a84141ae351cfe308433bfbda53374b. * cleanup new docker script. * build docker image in clean directory. * move macos Qt 5.12 build to xcode 10.3. This includes a workaround for a bug in the Qt intaller that causes segmentation faults in the Qt installer when the minimal platform is used on macos 10.14, 10.15. --- .travis.yml | 13 ++++------- tools/Dockerfile_qtio | 18 ++++++++++----- tools/make_docker_image | 13 +++++++---- tools/make_docker_qtio_image | 39 +++++++++++++++++++++++++++++++++ tools/qtci/extract-qt-installer | 18 ++++++++++----- tools/qtci/find_qt_installer | 24 ++++++++++++++++++++ 6 files changed, 101 insertions(+), 24 deletions(-) create mode 100755 tools/make_docker_qtio_image create mode 100755 tools/qtci/find_qt_installer diff --git a/.travis.yml b/.travis.yml index 489fc5b7a..10526f7ad 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,10 +1,9 @@ language: cpp -matrix: +jobs: include: - os: linux dist: bionic - sudo: required services: docker compiler: gcc env: @@ -12,7 +11,6 @@ matrix: - DOCKER_IMG="qtio" - os: linux dist: bionic - sudo: required services: docker compiler: clang env: @@ -20,7 +18,6 @@ matrix: - DOCKER_IMG="qtio" - os: linux dist: bionic - sudo: required services: docker compiler: gcc env: @@ -28,7 +25,6 @@ matrix: - DOCKER_IMG="" - os: linux dist: bionic - sudo: required services: docker compiler: gcc env: @@ -37,7 +33,6 @@ matrix: - DOCKER_SCRIPT="./tools/build_extra_tests" - os: linux dist: xenial - sudo: required compiler: gcc env: - BUILD_TYPE="local" @@ -67,15 +62,15 @@ matrix: - $HOME/Cache timeout: 600 - os: osx + osx_image: xcode10.3 compiler: clang - env: QT_VERSION="5.12.7" + env: QT_VERSION="5.12.8" cache: directories: - $HOME/Cache timeout: 600 - os: linux dist: bionic - sudo: required compiler: gcc env: - BUILD_TYPE="coverage" @@ -100,7 +95,7 @@ script: after_success: - cd ${TRAVIS_BUILD_DIR} # only deploy pushes to master or prs that target master. the prs will go to transfr.sh, the pushes go to github. - - if [ "${TRAVIS_OS_NAME}" = "osx" ] && [ "${QT_VERSION}" = "5.12.7" ] && [ "$TRAVIS_BRANCH" = "master" ]; then bash ./tools/uploadtool/upload.sh gui/GPSBabel-*.dmg; fi + - if [ "${TRAVIS_OS_NAME}" = "osx" ] && [ "${QT_VERSION}" = "5.12.8" ] && [ "$TRAVIS_BRANCH" = "master" ]; then bash ./tools/uploadtool/upload.sh gui/GPSBabel-*.dmg; fi branches: except: diff --git a/tools/Dockerfile_qtio b/tools/Dockerfile_qtio index 5824e8a4f..b53a66339 100644 --- a/tools/Dockerfile_qtio +++ b/tools/Dockerfile_qtio @@ -1,6 +1,6 @@ # this file is used to build the image gpsbabel_build_environment used by travis. -FROM ubuntu:bionic as qt_install +FROM ubuntu:bionic as qt_install_prep WORKDIR /app # update environment. @@ -25,14 +25,20 @@ RUN apt-get update && apt-get install -y --no-install-recommends \ wget \ && rm -rf /var/lib/apt/lists/* +FROM qt_install_prep as qt_install # basic build and test tools -COPY ./qtci/install-qt-online ./qtci/extract-qt-installer ./qtci/qt-install.qs /app/ -RUN QT_CI_DOWNLOADER="wget -nv -c" PATH=/app:${PATH} ./install-qt-online "qt.qt5.5127.gcc_64,qt.qt5.5127.qtwebengine" /opt -RUN echo "export PATH=/opt/Qt/5.12.7/gcc_64/bin:$PATH" > /opt/qt-5.12.7.env +ARG INSTALLER +ARG QT_CI_PACKAGES +ARG QT_VERSION +COPY ./extract-qt-installer ./qt-install.qs ./$INSTALLER /app/ +RUN ./extract-qt-installer $INSTALLER /opt/Qt \ + && rm ./extract-qt-installer ./qt-install.qs ./$INSTALLER \ + && echo "export PATH=/opt/Qt/$QT_VERSION/gcc_64/bin:$PATH" > /opt/qt-$QT_VERSION.env FROM ubuntu:bionic LABEL maintainer="https://github.com/tsteven4" WORKDIR /app +ARG QT_VERSION # update environment. ARG DEBIAN_FRONTEND=noninteractive @@ -89,8 +95,8 @@ RUN apt-get update && apt-get install -y --no-install-recommends \ && rm -rf /var/lib/apt/lists/* # Qt -COPY --from=qt_install /opt/qt-5.12.7.env /opt/qtio.env -COPY --from=qt_install /opt/Qt/5.12.7 /opt/Qt/5.12.7 +COPY --from=qt_install /opt/qt-$QT_VERSION.env /opt/qtio.env +COPY --from=qt_install /opt/Qt/$QT_VERSION /opt/Qt/$QT_VERSION COPY --from=qt_install /opt/Qt/Licenses /opt/Qt/Licenses # pkgs needed to generate coverage report: diff --git a/tools/make_docker_image b/tools/make_docker_image index c8521af3a..437722b00 100755 --- a/tools/make_docker_image +++ b/tools/make_docker_image @@ -3,10 +3,15 @@ versuffix=${1:+_$1} # tag name must be lower case tag=$(date -u +%Y%m%dT%H%M%SZ) -docker build --pull --file Dockerfile${versuffix} --tag gpsbabel_build_environment${versuffix}:latest . -docker tag gpsbabel_build_environment${versuffix}:latest gpsbabel_build_environment${versuffix}:$tag -docker tag gpsbabel_build_environment${versuffix}:latest tsteven4/gpsbabel_build_environment${versuffix}:latest -docker tag gpsbabel_build_environment${versuffix}:latest tsteven4/gpsbabel_build_environment${versuffix}:$tag +TMPDIR=$(mktemp -d) + +cp Dockerfile${versuffix} $TMPDIR + +docker build --pull --file Dockerfile${versuffix} \ + --tag tsteven4/gpsbabel_build_environment${versuffix}:latest \ + --tag tsteven4/gpsbabel_build_environment${versuffix}:$tag \ + $TMPDIR +/bin/rm -fr $TMPDIR docker push tsteven4/gpsbabel_build_environment${versuffix}:$tag docker push tsteven4/gpsbabel_build_environment${versuffix}:latest docker image ls diff --git a/tools/make_docker_qtio_image b/tools/make_docker_qtio_image new file mode 100755 index 000000000..d57f26f37 --- /dev/null +++ b/tools/make_docker_qtio_image @@ -0,0 +1,39 @@ +#!/bin/bash -ex +# you must be logged into docker for the push to succeed. + +#versuffix=${1:+_$1} # tag name must be lower case +versuffix=_qtio +tag=$(date -u +%Y%m%dT%H%M%SZ) + +QT_VERSION=5.12.8 +QT_VERSION_SHORT=${QT_VERSION//./} +QT_CI_PACKAGES="qt.qt5.${QT_VERSION_SHORT}.gcc_64,qt.qt5.${QT_VERSION_SHORT}.qtwebengine" +DOWNLOAD_URL=$(./qtci/find_qt_installer ${QT_VERSION}) +INSTALLER=$(basename $DOWNLOAD_URL) +TMPDIR=$(mktemp -d) + +cp Dockerfile${versuffix} $TMPDIR +cp ./qtci/extract-qt-installer ./qtci/qt-install.qs $TMPDIR +wget -nv -c -N -P $TMPDIR ${DOWNLOAD_URL} + +docker build --pull --file Dockerfile${versuffix} \ + --target qt_install_prep \ + $TMPDIR +docker build --pull --file Dockerfile${versuffix} \ + --network none \ + --build-arg INSTALLER=${INSTALLER} \ + --build-arg QT_CI_PACKAGES=${QT_CI_PACKAGES} \ + --build-arg QT_VERSION=${QT_VERSION} \ + --target qt_install \ + $TMPDIR +docker build --pull --file Dockerfile${versuffix} \ + --build-arg INSTALLER=${INSTALLER} \ + --build-arg QT_CI_PACKAGES=${QT_CI_PACKAGES} \ + --build-arg QT_VERSION=${QT_VERSION} \ + --tag tsteven4/gpsbabel_build_environment${versuffix}:latest \ + --tag tsteven4/gpsbabel_build_environment${versuffix}:$tag \ + $TMPDIR +/bin/rm -fr $TMPDIR +docker push tsteven4/gpsbabel_build_environment${versuffix}:$tag +docker push tsteven4/gpsbabel_build_environment${versuffix}:latest +docker image ls diff --git a/tools/qtci/extract-qt-installer b/tools/qtci/extract-qt-installer index acc8737b5..073302bdc 100755 --- a/tools/qtci/extract-qt-installer +++ b/tools/qtci/extract-qt-installer @@ -84,17 +84,25 @@ fi unset DISPLAY +# platform minimal doesn't work on macos 10.14, 10.15. It did work on 10.13. +# https://bugreports.qt.io/browse/QTIFW-1471 +PLATFORM="--platform minimal" +if [ "$(uname)" = "Darwin" ]; then + vn=$(sw_vers -productVersion | cut -d. -f2,2) + if [ $vn -ge 14 ]; then + unset PLATFORM + fi +fi + if [ -n "$DISABLE_PROGRESS_REPORT" ] then - QT_QPA_PLATFORM=minimal $INSTALLER --script $SCRIPT QTCI_LIST_PACKAGES="$LIST_PACKAGES" QTCI_PACKAGES="$PACKAGES" QTCI_OUTPUT="$OUTPUT" + $INSTALLER $PLATFORM --script $SCRIPT QTCI_LIST_PACKAGES="$LIST_PACKAGES" QTCI_PACKAGES="$PACKAGES" QTCI_OUTPUT="$OUTPUT" else - ARGS="-v" - if [ -n "$VERBOSE" ] then - QT_QPA_PLATFORM=minimal $INSTALLER $ARGS --script $SCRIPT QTCI_LIST_PACKAGES="$LIST_PACKAGES" QTCI_PACKAGES="$PACKAGES" QTCI_OUTPUT="$OUTPUT" + $INSTALLER --verbose $PLATFORM --script $SCRIPT QTCI_LIST_PACKAGES="$LIST_PACKAGES" QTCI_PACKAGES="$PACKAGES" QTCI_OUTPUT="$OUTPUT" else - QT_QPA_PLATFORM=minimal $INSTALLER $ARGS --script $SCRIPT QTCI_LIST_PACKAGES="$LIST_PACKAGES" QTCI_PACKAGES="$PACKAGES" QTCI_OUTPUT="$OUTPUT" | grep "\(QTCI\|operation\)" + $INSTALLER --verbose $PLATFORM --script $SCRIPT QTCI_LIST_PACKAGES="$LIST_PACKAGES" QTCI_PACKAGES="$PACKAGES" QTCI_OUTPUT="$OUTPUT" | grep "\(QTCI\|operation\)" fi fi diff --git a/tools/qtci/find_qt_installer b/tools/qtci/find_qt_installer new file mode 100755 index 000000000..d1b5486fd --- /dev/null +++ b/tools/qtci/find_qt_installer @@ -0,0 +1,24 @@ +#!/bin/bash -e +# Reference: +# https://github.com/musescore/MuseScore/blob/master/build/travis/job_macos/install.sh + +QT_VERSION=${1:-5.12.0} + +QT_MAJOR_VERSION=$(echo ${QT_VERSION} | cut -d "." -f 1) +QT_MINOR_VERSION=$(echo ${QT_VERSION} | cut -d "." -f 2) +if [ "$(uname)" = "Darwin" ]; then + if { [ "${QT_MAJOR_VERSION}" -eq 5 ] && [ "${QT_MINOR_VERSION}" -ge 9 ]; } || [ "${QT_MAJOR_VERSION}" -ge 6 ]; then + # this was good from 5.9.0 through at least 5.12.0 + DOWNLOAD_URL=https://download.qt.io/archive/qt/${QT_MAJOR_VERSION}.${QT_MINOR_VERSION}/${QT_VERSION}/qt-opensource-mac-x64-${QT_VERSION}.dmg + else + # this was good from 5.2.1 through 5.8.0 + DOWNLOAD_URL=https://download.qt.io/archive/qt/${QT_MAJOR_VERSION}.${QT_MINOR_VERSION}/${QT_VERSION}/qt-opensource-mac-x64-clang-${QT_VERSION}.dmg + fi +elif [ "$(uname)" = "Linux" ]; then + # this was good from 5.2.1 through at least 5.12.0 + DOWNLOAD_URL=https://download.qt.io/archive/qt/${QT_MAJOR_VERSION}.${QT_MINOR_VERSION}/${QT_VERSION}/qt-opensource-linux-x64-${QT_VERSION}.run +else + echo "Unsupported system." >&2 + exit 1 +fi +echo $DOWNLOAD_URL -- 2.30.2